/*
 * @Descripttion:
 * @Author: Kevin
 * @Date: 2022-05-30 10:11:22
 * @LastEditors: 汤米淘大米
 * @LastEditTime: 2022-11-30
 */
import Vue from 'vue';
import VueI18n from 'vue-i18n';
import moment from 'moment'; // 日期处理类
import en from './lang/js/en';
import zh from './lang/js/zh';
const language = process.env.VUE_APP_MACC_DEFAULT_LANGUAGE;
Vue.use(VueI18n);
const messages = {
  zh,
  en,
};
const loadedLanguages = [language];
const i18n = new VueI18n({
  // 是否消息本地化失败时输出的警告
  silentTranslationWarn: true,
  // 默认语言环境
  locale: language,
  // 预设的语言环境（相当于默认语言，当前语言翻译不全时，使用预设语言文本）
  fallbackLocale: language,
  messages,
});
console.log('i18n配置', i18n.messages);
/**
 * 设置vue-i18n语言
 * @param {*} lang
 * @returns
 */
function setI18nLanguage(lang) {
  i18n.locale = lang;
  // request.headers['Accept-Language'] = lang
  document.querySelector('html').setAttribute('lang', lang);
  if (lang === 'ar') {
    document.querySelector('html').classList.add('is-rtl');
  } else {
    document.querySelector('html').classList.remove('is-rtl');
  }
  return lang;
}

/**
 * 加载语言
 * @param {*} lang
 * @returns
 */
export function loadLanguageAsync(lang = language) {
  return new Promise((resolve) => {
    if (i18n.locale !== lang) {
      if (!loadedLanguages.includes(lang)) {
        return import(
          /* webpackChunkName: "lang-[request]" */
          `./lang/js/${lang}`
        )
          .then((msg) => {
            const locale = msg.default;
            i18n.setLocaleMessage(lang, locale);
            loadedLanguages.push(lang);
            //console.log(locale.momentLocale);
            moment.updateLocale(locale.momentName, locale.momentLocale);
            //moment.locale(locale.momentName);
            return setI18nLanguage(lang);
          })
          .catch((e) => {
            console.log('加载语言包错误', e);
          });
      }
      return resolve(setI18nLanguage(lang));
    }
    return resolve(lang);
  });
}

/**
 *
 * @param {string} key  词条key名
 * @param {object} replaces 词条中要替换的变量
 * @returns {string}
 */
export function i18nRender(key, replaces = {}) {
  return i18n.t(key, replaces);
}

export default i18n;
